iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0
自我挑戰組

IOS app開發介紹系列 第 13

IOS app開發介紹 - IOS一些重要的概念與機制(9. 了解與分析App Crash Report)

  • 分享至 

  • xImage
  •  

了解與分析App Crash Report,當我們的app發佈給使用者使用後發生crash,我們無法像在開發階段用Debug mode,會直接停留在發生crash的那一行.Apple提供我們以下兩種方式來找到使用者使用發生crash的地方


找到crash地方的方法:

1. Crash Report(With Xcode)
2. symbolicate crash log(With symbolicatecrash)

下面這張圖是Apple官方文件的圖,描述了方法1和方法2

ref: https://developer.apple.com/library/archive/technotes/tn2151/index.html?fbclid=IwAR1JhuffKjVQhf9RC77pyy4kRr2ejZS7cp3FNwYvWWWl06TRflhkWRrunM*

在了解如何用方法1和方法2找出crash的地方前,我們先根據Apple官方這張圖來了解一下從build code到找出crash的整個流程:

(1) 編譯器(Compiler)把我們的程式碼轉成機器碼(binary code)時,同時也產生debug symbol(讓binary code能對應到我們寫的程式碼).debug symbol有可能和binary code包在一起或是在另一個獨立的Debug Symbo(dSYM)file.Xcode預設是產生獨立得dSYM file來減少binary code size.
(2) 當你為了發佈app進行打包的時候,Xcode會把app的binary code和dSYM file一起儲存在home folder底下(EX: /Users/YourUserName/Library/Developer/Xcode/Archives)
(3) 當你發佈你的app到App Store或TestFlight(Beta測試)時,會有一個選項讓你選擇是否要上傳dSYM檔,請選擇上傳,這樣才能夠收到一般使用者(p.s 需同意分享app診斷資料)或測試人員的crash report.
(4) 當你的程式發生crash,未符號化(unsymbolicated)的crash report將會存在ios裝置上
Note: 未符號化的crash report指的是機器碼
符號化的crash report指的是你的程式碼的某一行
(5)
如果你發佈app的方式是透過AdHoc or Enterprise distribution(i.e 沒上傳到App store上),則可以透過把裝置連接到mac,然後在Xcode中點選Window -> Devices and Simulators中去取出crash log
Note: 如果無法直接取得ios裝置,也可以請測試人員在iphone系統設定->隱私權->分析->分析資料中找到crash的log,把crash log用email方式寄到你的信箱
(6)
從Device中取出crash log後,可以像之前提到的,利用dSYM file來進行符號化,找出crash在哪一行.
Note: 可在Xcode裡面或無Xcode下進行符號化(之後會提到),唯一的差別是在Xcode裡面進行符號化,可以幫你導到crash的那一行.反之,則是看到crash那行code.意義一樣,沒有差別.
(7)
如果一般使用者選擇分析診斷資料給Apple或是透過TestFlight下載的測試app,都會將crash report上傳到App Store.
(8)
App store會對crash report進行符號話並歸類.(這行為稱為Crash Point)
(9)
你可以在Xcode中的Window -> Organizer看到歸類好的crash report


找出dSYM檔

  1. 從Xcode的Organizer中去下載
  2. 取itunes connect網站上下載
    (p.s 去itunes connect你的app的活動頁面點選對應的版號,就可以看到下載dSYM的按鈕.注意下載下來的dSYM解壓縮後只會看到xxx-xxx-xxxx-....dSYM,請點右鍵->顯示套件內容-> Contents->Info.plist,plist裡面有名稱,請找到你的appName,那個dSYM才是你要用的))
  3. 從你打包好的archive中去找出dSYM檔
    (p.s 右鍵->Show in Finder -> 右鍵->顯示套件內容-> appName.dSYM)

找到crash地方的方法:

1. Crash Report - Symbolicating iOS Crash Reports With Xcode
2. symbolicate crash log - Symbolicating Crash Reports With symbolicatecrash


1. Symbolicating iOS Crash Reports With Xcode
第一個方法只要在Xcode中的Window -> Organizer中去點到我們的app的Crash頁面,直接就可以看到符號化的結果,如果你的程式碼是當時build的版本,則直接點crash就可以導到我們程式碼crash的那一行

2. Symbolicating Crash Reports With symbolicatecrash
這個方法是利用Xcode的一個工具symbolicatecrash
步驟如下:
1.設定DEVELOPER_DIR環境變數
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
2. 先切換到有symbolicatecrash的路徑:
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources
在這個資料夾底下就有symbolicatecrash這個工具 (注意不同版本Xcode,這個工具的路徑可能不同)
3.輸入以下指令 (假設crash log和dSYM都放在~/Desktop/test/底下,而我們符號化的結果存在Result.log檔案裡)
./symbolicatecrash ~/Desktop/test/XXXX.log ~/Desktop/test/XXXX.app.dSYM/ > ~/Desktop/test/Result.log

這樣你就可以產生出對應到程式碼的crash log了
詳細可參考下面這個連結:
ref: https://www.jianshu.com/p/da186c14db0f


ref: https://developer.apple.com/library/archive/technotes/tn2151/_index.html?fbclid=IwAR1JhuffKjVQhf9RC77pyy4kRr2ejZS7cp3FNwYvWWWl0_6TRflhkWRrunM


上一篇
IOS app開發介紹 - IOS一些重要的概念與機制(8. 發佈app流程)
下一篇
IOS app開發介紹 - 實用範例 (UITableView (1))
系列文
IOS app開發介紹22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言